<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

//Libreria unica de Registro

class Fabrica {
	
    /**
     * Class constructor
     */
    function __construct(){
        $this->CI =& get_instance();

        $this->CI->load->model('Registro_model');
        $this->evento = $this->CI->Registro_model->config_conference();
        $this->documents = $this->CI->police->police_control(FALSE);
    }
    
    function configura_reglas($campos){
        
        foreach ($campos as $campo) {
            $nombre = $campo->nombre;
            $reglas = 'trim';
            
            if($campo->requerido === '1'){
                $reglas .= '|required';
            }
                        
            if(isset($campo->propiedades->reglas)){
                $reglas .= $campo->propiedades->reglas;
            }
            
            switch ($campo->tipo) {
                case 'checkbox':
                    $this->CI->form_validation->set_rules($nombre.'[]',lang('campos.'.$nombre, FALSE, $campo->etiqueta), $reglas);
                    break;
                default: 
                    $this->CI->form_validation->set_rules($nombre, lang('campos.'.$nombre, FALSE, $campo->etiqueta), $reglas);
                    break;
            }
        }           
    }
    
    
       
    function creador($campo, $value = NULL){
        $var = '';
        $class_label = isset($campo->propiedades->class_label)? $campo->propiedades->class_label : 'col-md-3';
        
        $value = $value === NULL && isset($campo->propiedades->valor)? $campo->propiedades->valor : $value; 
        $abrir = isset($campo->propiedades->abrir)? !!$campo->propiedades->abrir : TRUE; 
        $cerrar = isset($campo->propiedades->cerrar)? !!$campo->propiedades->cerrar : TRUE; 

        if($campo->tipo === 'title'){
            $var = $this->title($campo);
            return $var;
        }
        
        if($abrir){
            $var = '<div class="form-group">';
            $var .= '<label class="'.$class_label.' control-label" for="'.$campo->nombre.'" >';
                if($campo->requerido === '1'){
                    $var .='<span class="glyphicon glyphicon-star"></span>';
                }
            $var .= lang('campos.'.$campo->nombre, FALSE, $campo->etiqueta).'</label>';
        }
        
        switch ($campo->tipo) {
            case 'text':
                $var .= $this->text($campo, $value);
                break;
            case 'select':
                $var .= $this->select($campo, $value);
                break;
            case 'checkbox':
                $var .= $this->checkbox($campo, $value);
                break;
            case 'date':
                $var .= $this->date($campo, $value);
                break;
            case 'bool':
                $var .= $this->bool($campo, $value);
                break;
        }
        
        if($cerrar){
            $var .= '</div>';
        }
        
        return $var;
    }

    function creador_mostrar($campo, $value = ''){
        $var = '';
        $abrir = isset($campo->propiedades->abrir)? !!$campo->propiedades->abrir : TRUE; 
        $cerrar = isset($campo->propiedades->cerrar)? !!$campo->propiedades->cerrar : TRUE; 

        if($campo->tipo === 'title'){
            $var = $this->title($campo);
            return $var;
        }
        
        if($abrir){
            $var = '<div class="row">';
            $var .= '<div class="col-md-3 label-edit">';
            $var .= '<strong>'.lang('campos.'.$campo->nombre, FALSE, $campo->etiqueta).'</strong>';
            $var .= '</div>';
        }
        
        switch ($campo->tipo) {
            case 'text':
                $var .= '<div class="col-md-4">'.$value.'</div>';
                break;
            case 'select':
                $var .= $this->select_mostrar($campo, $value);
                break;
            case 'checkbox':
                $var .= $this->checkbox_mostrar($campo, $value);
                break;
        }
        
        if($cerrar){
            $var .= '</div>';
        }
        
        return $var;
    }
    
    function value_default($campo){
        $prop = new stdClass();
        $prop->class = isset($campo->propiedades->class)? $campo->propiedades->class : 'col-md-5'; 
        $prop->placeholder = isset($campo->propiedades->placeholder)? $campo->propiedades->placeholder : ''; 
        $prop->class_control = isset($campo->propiedades->class_control)? $campo->propiedades->class_control : ''; 
        
        $readonly = '';
        if(!$this->documents){
            $readonly = isset($campo->propiedades->readonly)? 'readonly="readonly"' : ''; 
        }
        $prop->readonly = $readonly;
        
        return $prop;
    }
    
    function text($campo, $value){
        $nombre = $campo->nombre;
        $prop = $this->value_default($campo);
        
        $var = '<div class="'.$prop->class.'">';
            $var .= '<input class="form-control '.$prop->class_control.'" type="text" name="'.$nombre.'" id="'.$campo->nombre.'" placeholder="'.$prop->placeholder.'" value="'.set_value($nombre, $value).'" '.$prop->readonly.' />';
            $var .=  form_error($nombre, '<div class="bg-danger">', '</div>'); 
        $var .= '</div>';

        return $var;
    }
    
    function bool($campo, $value){
        $nombre = $campo->nombre;
        $prop = $this->value_default($campo);
        
        $var = '<div class="'.$prop->class.'">';
            $var .= '<label class = "radio-inline">';
                $var .= '<input type = "radio" name="'.$nombre.'" value = "1" '.set_radio($nombre, '1', ($value === '1')).'>'.lang('campos.bool_si', FALSE, 'Si');
            $var .= '</label>';
            $var .= '<label class = "radio-inline">';
                $var .= '<input type = "radio" name="'.$nombre.'" value = "0" '.set_radio($nombre, '0', ($value === '0')).'>'.lang('campos.bool_no', FALSE, 'No');
            $var .= '</label>';
            $var .=  form_error($nombre, '<div class="bg-danger">', '</div>'); 
        $var .= '</div>';
        return $var;
    }

    function date($campo, $value){
        $nombre = $campo->nombre;
        $prop = $this->value_default($campo);
        
        $var = '<div class="'.$prop->class.'">';
            $var .= '<div class="input-group date" id="date_'.$nombre.'">';
            $var .= '<input type="text" class="form-control '.$prop->class_control.'" id="'.$nombre.'" name="'.$nombre.'" value="'.set_value($nombre, $value).'" '.$prop->readonly.' />';
            $var .= '<span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span></span>';
            $var .= '</div>';
            $var .=  form_error($nombre, '<div class="bg-danger">', '</div>'); 
        $var .= '</div>';

        return $var;
    }
    
    function select($campo, $value = ''){
        $nombre = $campo->nombre;
        $prop = $this->value_default($campo);
        
        $var = '<div class="'.$prop->class.'">';
            $var .= '<select class="form-control '.$prop->class_control.'" name="'.$nombre.'">';
                $var .= '<option value="" '.set_select($nombre, '').'>'.lang('campos.seleccione', FALSE, 'Seleccione uno').'</option>';
                $arr = array('nombre' => $nombre);
                $registros = $this->CI->Registro_model->model_selector($arr);      
                foreach ($registros->result() as $fila){
                    $var .= '<option value="'.$fila->{'id_'.$nombre}.'" '.set_select($nombre, $fila->{'id_'.$nombre}, ($fila->{'id_'.$nombre} === $value)).'>'.lang($nombre.'.'.$fila->{'id_'.$nombre}, FALSE, $fila->{'nombre_'.$nombre}).'</option>';
                }
            $var .= '</select>';  
            $var .= form_error($nombre, '<div class="bg-danger">', '</div>');
        $var .= '</div>';
        return $var;
    }
    
    function checkbox($campo, $value = ''){
        $nombre = $campo->nombre;
        $prop = $this->value_default($campo);
        if($value && !is_array($value)){
            $value = json_decode($value);
        }else if(!$value){
            $value = array();
        }
        
        $var = '<div class="'.$prop->class.'">';
            $arr = array('nombre' => $nombre);
            $registros = $this->CI->Registro_model->model_selector($arr);      
            foreach ($registros->result() as $fila){
                  $var .= '<div class="checkbox">';
                    $var .= '<label>';
                      $var .= '<input type="checkbox" name="'.$nombre.'[]" value="'.$fila->{'id_'.$nombre}.'" '.set_checkbox($nombre.'[]', $fila->{'id_'.$nombre}, in_array($fila->{'id_'.$nombre}, $value, TRUE)).'>'.lang($nombre.'.'.$fila->{'id_'.$nombre}, FALSE, $fila->{'nombre_'.$nombre});
                    $var .= '</label>';
                  $var .= '</div>';
            }
            $var .= form_error($nombre.'[]', '<div class="bg-danger">', '</div>');
        $var .= '</div>';
        return $var;
    }
    
    function select_mostrar($campo, $value = ''){
        $nombre = $campo->nombre;
        
        $var = '<div class="col-md-4">';
            $arr = array('nombre' => $nombre, 'id' => $value);
            $registros = $this->CI->Registro_model->model_selector($arr);    
            $fila = $registros->row();

            $var .= lang($nombre.'.'.$fila->{'id_'.$nombre}, FALSE, $fila->{'nombre_'.$nombre});
        $var .= '</div>';
        return $var;
    }
    
    function checkbox_mostrar($campo, $value = ''){
        $nombre = $campo->nombre;
        if($value && !is_array($value)){
            $value = json_decode($value);
        }else if(!$value){
            $value = array();
        }
        
        $var = '<div class="col-md-4">';
            $arr = array('nombre' => $nombre);
            $registros = $this->CI->Registro_model->model_selector($arr);
            $datos = array();
            foreach ($registros->result() as $fila){
                $datos[$fila->{'id_'.$nombre}] = lang($nombre.'.'.$fila->{'id_'.$nombre}, FALSE, $fila->{'nombre_'.$nombre});
            }
            $values_name = '';
            foreach ($value as $key => $val) {
                $ini = $key? ', ':'';
                $values_name .= $ini.$datos[$val];
            }
        $var .= $values_name.'</div>';
        return $var;
    }
    
    function title($campo){
        $var = '<div class="form-group div-header h1-text">';
        $var .= '<h3>'.lang('campos.'.$campo->nombre, FALSE, $campo->etiqueta).'</h3>';
        $var .= '</div>';
        
        return $var;
}	
}	
// END Fabrica CLASS

/* End of file Fabrica.php */

/* Location: ./application/libraries/Fabrica.php */